#include "SEGGER_RTT.h"
#include "cli_console.h"
#include <stdint.h>
#include <string.h>

int segger_console_init(void *private_data);
int segger_console_deinit(void *private_data);
int segger_console_write(const void *buf, size_t len, void *privata_data);
int segger_console_read(void *buf, size_t len, void *privata_data);

static device_console segger_console = {.name = "segger-console",
                                        .fd = -1,
                                        .write = segger_console_write,
                                        .read = segger_console_read,
                                        .init = segger_console_init,
                                        .deinit = segger_console_deinit};
void hal_reboot() {}

int segger_console_write(const void *buf, size_t len, void *privata_data) {
    size_t i;
    const char *tmp = (char *)buf;
    for (i = 0; i < len; i++) {
        if (*tmp == '\n') {
            SEGGER_RTT_PutCharSkip(0, '\r');
        }
        SEGGER_RTT_PutCharSkip(0, *tmp);
        tmp++;
    }

    return len;
}

int segger_console_read(void *buf, size_t len, void *privata_data) {
    return SEGGER_RTT_Read(0, buf, 1);
}

int segger_console_init(void *private_data) { return 0; }

int segger_console_deinit(void *private_data) { return 0; }

cli_console cli_uart_console = {
    .i_list = {0},
    .name = "ash",
    .dev_console = &segger_console,
    .init_flag = 0,
    .exit_flag = 0,
    .alive = 1,
    .private_data = NULL,
    .cli_tag = {0},
    .cli_tag_len = 0,
    .task_list = {0},
    .finsh_callback = NULL,
    .start_callback = NULL,
};
